home *** CD-ROM | disk | FTP | other *** search
/ Visual Cafe 3 / Visual Cafe 3.ISO / Vcafe / Main.bin / LineBreakData.java < prev    next >
Text File  |  1998-09-22  |  23KB  |  417 lines

  1. /*
  2.  * @(#)LineBreakData.java    1.8 98/01/12
  3.  *
  4.  * (C) Copyright Taligent, Inc. 1996 - All Rights Reserved
  5.  * (C) Copyright IBM Corp. 1996 - All Rights Reserved
  6.  *
  7.  * Portions copyright (c) 1996 Sun Microsystems, Inc. All Rights Reserved.
  8.  *
  9.  *   The original version of this source code and documentation is copyrighted
  10.  * and owned by Taligent, Inc., a wholly-owned subsidiary of IBM. These
  11.  * materials are provided under terms of a License Agreement between Taligent
  12.  * and Sun. This technology is protected by multiple US and International
  13.  * patents. This notice and attribution to Taligent may not be removed.
  14.  *   Taligent is a registered trademark of Taligent, Inc.
  15.  *
  16.  * Permission to use, copy, modify, and distribute this software
  17.  * and its documentation for NON-COMMERCIAL purposes and without
  18.  * fee is hereby granted provided that this copyright notice
  19.  * appears in all copies. Please refer to the file "copyright.html"
  20.  * for further important copyright and licensing information.
  21.  *
  22.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
  23.  * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
  24.  * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
  25.  * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
  26.  * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
  27.  * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
  28.  *
  29.  */
  30.  
  31. package java.text;
  32.  
  33. /**
  34.  * The LineBreakData contains data used by SimpleTextBoundary
  35.  * to determine line breaks.
  36.  * @see #BreakIterator
  37.  */
  38. final class LineBreakData extends TextBoundaryData
  39. {
  40.     private static final byte BREAK                 = 0;
  41.     //always breaks (must be present as first item)
  42.     private static final byte blank                 = 1;
  43.     //spaces, tabs, nulls.
  44.     private static final byte cr                    = 2;
  45.     //carriage return
  46.     private static final byte nonBlank              = 3;
  47.     //everything not included elsewhere
  48.     private static final byte op                    = 4;
  49.     //hyphens....
  50.     private static final byte jwrd                  = 5;
  51.     //hiragana, katakana, and kanji
  52.     private static final byte preJwrd               = 6;
  53.     //characters that bind to the beginning of a Japanese word
  54.     private static final byte postJwrd              = 7;
  55.     //characters that bind to the end of a Japanese word
  56.     private static final byte digit                 = 8;
  57.     //digits
  58.     private static final byte numPunct              = 9;
  59.     //punctuation that can appear within a number
  60.     private static final byte currency              = 10;
  61.     //currency symbols that can precede a number
  62.     private static final byte nsm                   = 11;
  63.     // non-spacing marks
  64.     private static final byte nbsp                  = 12;
  65.     // non-breaking characters
  66.     private static final byte EOS                   = 13;
  67.     private static final int COL_COUNT = 14;
  68.  
  69.     private static final byte SI = (byte)0x80;
  70.     private static final byte STOP = (byte) 0;
  71.     private static final byte SI_STOP = (byte)SI + STOP;
  72.  
  73.     private static final byte kLineForwardData[] =
  74.     {
  75.         // brk         bl             cr             nBl
  76.         // op          kan            prJ            poJ
  77.         // dgt         np             curr           nsm
  78.         // nbsp        EOS
  79.         /*00*/
  80.         STOP,          STOP,          STOP,          STOP,
  81.         STOP,          STOP,          STOP,          STOP,
  82.         STOP,          STOP,          STOP,          STOP,
  83.         STOP,          STOP,
  84.         /*01*/
  85.         (byte)(SI+4),  (byte)(SI+2),  (byte)(SI+7),  (byte)(SI+3),
  86.         (byte)(SI+6),  (byte)(SI+5),  (byte)(SI+1),  (byte)(SI+8),
  87.         (byte)(SI+9),  (byte)(SI+8),  (byte)(SI+1),  (byte)(SI+1),
  88.         (byte)(SI+1),  SI_STOP,
  89.         /*02*/
  90.         (byte)(SI+4),  (byte)(SI+2),  (byte)(SI+7),  SI_STOP,
  91.         SI_STOP,       SI_STOP,       SI_STOP,       SI_STOP,
  92.         SI_STOP,       SI_STOP,       SI_STOP,       (byte)(SI+2),
  93.         (byte)(SI+1),  SI_STOP,
  94.         /*03*/
  95.         (byte)(SI+4),  (byte)(SI+2),  (byte)(SI+7),  (byte)(SI+3),
  96.         (byte)(SI+6),  SI_STOP,       SI_STOP,       (byte)(SI+8),
  97.         (byte)(SI+9),  (byte)(SI+8),  SI_STOP,       (byte)(SI+3),
  98.         (byte)(SI+1),  SI_STOP,
  99.         /*04*/
  100.         SI_STOP,       SI_STOP,       SI_STOP,       SI_STOP,
  101.         SI_STOP,       SI_STOP,       SI_STOP,       SI_STOP,
  102.         SI_STOP,       SI_STOP,       SI_STOP,       SI_STOP,
  103.         SI_STOP,       SI_STOP,
  104.         /*05*/
  105.         (byte)(SI+4),  (byte)(SI+2),  (byte)(SI+7),  SI_STOP,
  106.         SI_STOP,       SI_STOP,       SI_STOP,       (byte)(SI+8),
  107.         SI_STOP,       (byte)(SI+8),  SI_STOP,       (byte)(SI+5),
  108.         (byte)(SI+1),  SI_STOP,
  109.         /*06*/
  110.         (byte)(SI+4),  SI_STOP,       (byte)(SI+7),  SI_STOP,
  111.         SI_STOP,       SI_STOP,       SI_STOP,       SI_STOP,
  112.         (byte)(SI+9),  SI_STOP,       (byte)(SI+11), (byte)(SI+6),
  113.         (byte)(SI+1),  SI_STOP,
  114.         /*07*/
  115.         (byte)(SI+4),  SI_STOP,       SI_STOP,       SI_STOP,
  116.         SI_STOP,       SI_STOP,       SI_STOP,       SI_STOP,
  117.         SI_STOP,       SI_STOP,       SI_STOP,       SI_STOP,
  118.         SI_STOP,       SI_STOP,
  119.         /*08*/
  120.         (byte)(SI+4),  (byte)(SI+2),  (byte)(SI+7),  SI_STOP,
  121.         SI_STOP,       SI_STOP,       SI_STOP,       (byte)(SI+8),
  122.         SI_STOP,       (byte)(SI+8),  SI_STOP,       (byte)(SI+8),
  123.         (byte)(SI+1),  SI_STOP,
  124.         /*09*/
  125.         (byte)(SI+4),  (byte)(SI+2),  (byte)(SI+7),  (byte)(SI+3),
  126.         (byte)(SI+6),  SI_STOP,       SI_STOP,       (byte)(SI+8),
  127.         (byte)(SI+9),  (byte)(SI+10), (byte)(SI+10), (byte)(SI+9),
  128.         (byte)(SI+1),  SI_STOP,
  129.         /*10*/
  130.         (byte)(SI+4),  (byte)(SI+2),  (byte)(SI+7),  SI_STOP,
  131.         SI_STOP,       SI_STOP,       SI_STOP,       (byte)(SI+8),
  132.         (byte)(SI+9),  (byte)(SI+8),  SI_STOP,       (byte)(SI+10),
  133.         (byte)(SI+1),  SI_STOP,
  134.         /*11*/
  135.         STOP,          STOP,          STOP,          STOP,
  136.         STOP,          STOP,          STOP,          STOP,
  137.         (byte)(SI+9),  STOP,          STOP,          (byte)(11),
  138.         (byte)(SI+1),  STOP
  139.     };
  140.  
  141.     private static final WordBreakTable kLineForward
  142.         = new WordBreakTable(COL_COUNT, kLineForwardData);
  143.  
  144.     private static final byte kLineBackwardData[] =
  145.     {
  146.         // brk         bl             cr             nBl
  147.         // op          kan            prJ            poJ
  148.         // dgt         np             curr           nsm
  149.         // nbsp        EOS
  150.         /*00*/
  151.         STOP,          STOP,          STOP,          STOP,
  152.         STOP,          STOP,          STOP,          STOP,
  153.         STOP,          STOP,          STOP,          STOP,
  154.         STOP,          STOP,
  155.         /*01*/
  156.         (byte)(SI+1),  (byte)(SI+1),  (byte)(SI+1),  (byte)(SI+2),
  157.         (byte)(SI+2),  (byte)(SI+4),  (byte)(SI+2),  (byte)(SI+3),
  158.         (byte)(SI+2),  (byte)(SI+3),  (byte)(SI+2),  (byte)(SI+1),
  159.         (byte)(SI+2),  STOP,
  160.         /*02*/
  161.         STOP,          STOP,          STOP,          (byte)(SI+2),
  162.         (byte)(SI+2),  STOP,          (byte)(SI+2),  (byte)(SI+3),
  163.         (byte)(SI+2),  (byte)(SI+3),  (byte)(SI+2),  (byte)(SI+2),
  164.         (byte)(SI+2),  STOP,
  165.         /*03*/
  166.         STOP,          STOP,          STOP,          (byte)(SI+2),
  167.         STOP,          (byte)(SI+4),  (byte)(SI+2),  (byte)(SI+3),
  168.         (byte)(SI+2),  (byte)(SI+3),  (byte)(SI+2),  (byte)(SI+3),
  169.         (byte)(SI+2),  STOP,
  170.         /*04*/
  171.         STOP,          STOP,          STOP,          STOP,
  172.         STOP,          STOP,          (byte)(SI+2),  STOP,
  173.         STOP,          STOP,          (byte)(SI+2),  (byte)(SI+4),
  174.         (byte)(SI+4),  STOP
  175.     };
  176.  
  177.     private static final WordBreakTable kLineBackward
  178.         = new WordBreakTable(COL_COUNT, kLineBackwardData);
  179.  
  180.     private static final int kRawMapping[] =
  181.     {
  182.         nonBlank, //UNASSIGNED             = 0,
  183.         nonBlank, //UPPERCASE_LETTER       = 1,
  184.         nonBlank, //LOWERCASE_LETTER       = 2,
  185.         nonBlank, //TITLECASE_LETTER       = 3,
  186.         nonBlank, //MODIFIER_LETTER        = 4,
  187.         nonBlank, //OTHER_LETTER           = 5,
  188.         nsm,      //NON_SPACING_MARK       = 6,
  189.         nsm,      //ENCLOSING_MARK         = 7,
  190.         nonBlank, //COMBINING_SPACING_MARK = 8,
  191.         digit, //DECIMAL_DIGIT_NUMBER      = 9,
  192.         nonBlank, //LETTER_NUMBER          = 10,
  193.         digit, //OTHER_NUMBER              = 11,
  194.         blank, //SPACE_SEPARATOR           = 12,
  195.         blank, //LINE_SEPARATOR            = 13,
  196.         blank, //PARAGRAPH_SEPARATOR       = 14,     ???????????
  197.         blank, //CONTROL                   = 15,
  198.         nonBlank, //PRIVATE_USE            = 16,
  199.         nonBlank, //FORMAT                 = 17
  200.         nonBlank, //????                   = 18,
  201.         nonBlank, //SURROGATE              = 19,
  202.         op, //DASH_PUNCTUATION             = 20,
  203.         preJwrd, //START_PUNCTUATION       = 21,
  204.         postJwrd, //END_PUNCTUATION        = 22,
  205.         nonBlank, //CONNECTOR_PUNCTUATION  = 23,
  206.         nonBlank, //OTHER_PUNCTUATION      = 24,
  207.         nonBlank, //MATH_SYMBOL            = 25,
  208.         preJwrd, //CURRENCY_SYMBOL         = 26,
  209.         nonBlank, //MODIFIER_SYMBOL        = 27,
  210.         nonBlank  //OTHER_SYMBOL           = 28;
  211.     };
  212.  
  213.     private static SpecialMapping kExceptionChar[] =
  214.     {
  215.         //note: the ranges in this table must be sorted in ascending order as
  216.         //      required by the UnicodeClassMapping class.
  217.         new SpecialMapping(ASCII_END_OF_TEXT, BREAK),
  218.         new SpecialMapping(ASCII_HORIZONTAL_TABULATION,
  219.                            ASCII_FORM_FEED, BREAK),
  220.         new SpecialMapping(ASCII_CARRIAGE_RETURN, cr),
  221.         new SpecialMapping(ASCII_EXCLAMATION_MARK, postJwrd),
  222.         new SpecialMapping(ASCII_DOLLAR_SIGN, preJwrd),
  223.         new SpecialMapping(ASCII_PERCENT, postJwrd),
  224.         new SpecialMapping(ASCII_COMMA, numPunct),
  225.         new SpecialMapping(ASCII_FULL_STOP, numPunct),
  226.         new SpecialMapping(ASCII_COLON, ASCII_SEMICOLON, postJwrd),
  227.         new SpecialMapping(ASCII_QUESTION_MARK, postJwrd),
  228.         new SpecialMapping(ASCII_NONBREAKING_SPACE, nbsp),
  229.         new SpecialMapping(ASCII_CENT_SIGN, postJwrd),
  230.         new SpecialMapping(LATIN1_SOFTHYPHEN, op),
  231.         new SpecialMapping(LATIN1_DEGREE_SIGN, postJwrd),
  232.         new SpecialMapping(ARABIC_PERCENT_SIGN, postJwrd),
  233.         new SpecialMapping(FIGURE_SPACE, nbsp),
  234.         new SpecialMapping(NONBREAKING_HYPHEN, nbsp),
  235.         new SpecialMapping(PUNCTUATION_LINE_SEPARATOR,
  236.                            PUNCTUATION_PARAGRAPH_SEPARATOR, BREAK),
  237.         new SpecialMapping(PER_MILLE_SIGN, postJwrd),
  238.         new SpecialMapping(PER_TEN_THOUSAND_SIGN, postJwrd),
  239.         new SpecialMapping(PRIME, TRIPLE_PRIME, postJwrd),
  240.         new SpecialMapping(DEGREE_CELSIUS, postJwrd),
  241.         new SpecialMapping(DEGREE_FAHRENHEIT, postJwrd),
  242.         new SpecialMapping(PUNCTUATION_IDEOGRAPHIC_COMMA,
  243.                            PUNCTUATION_IDEOGRAPHIC_FULL_STOP, postJwrd),
  244.         new SpecialMapping(IDEOGRAPHIC_ITERATION_MARK, postJwrd),
  245.         new SpecialMapping(HIRAGANA_LETTER_SMALL_A, postJwrd),
  246.         new SpecialMapping(HIRAGANA_LETTER_A, jwrd),
  247.         new SpecialMapping(HIRAGANA_LETTER_SMALL_I, postJwrd),
  248.         new SpecialMapping(HIRAGANA_LETTER_I, jwrd),
  249.         new SpecialMapping(HIRAGANA_LETTER_SMALL_U, postJwrd),
  250.         new SpecialMapping(HIRAGANA_LETTER_U, jwrd),
  251.         new SpecialMapping(HIRAGANA_LETTER_SMALL_E, postJwrd),
  252.         new SpecialMapping(HIRAGANA_LETTER_E, jwrd),
  253.         new SpecialMapping(HIRAGANA_LETTER_SMALL_O, postJwrd),
  254.         new SpecialMapping(HIRAGANA_LETTER_O, HIRAGANA_LETTER_DI, jwrd),
  255.         new SpecialMapping(HIRAGANA_LETTER_SMALL_TU, postJwrd),
  256.         new SpecialMapping(HIRAGANA_LETTER_TU, HIRAGANA_LETTER_MO, jwrd),
  257.         new SpecialMapping(HIRAGANA_LETTER_SMALL_YA, postJwrd),
  258.         new SpecialMapping(HIRAGANA_LETTER_YA, jwrd),
  259.         new SpecialMapping(HIRAGANA_LETTER_SMALL_YU, postJwrd),
  260.         new SpecialMapping(HIRAGANA_LETTER_YU, jwrd),
  261.         new SpecialMapping(HIRAGANA_LETTER_SMALL_YO, postJwrd),
  262.         new SpecialMapping(HIRAGANA_LETTER_YO, HIRAGANA_LETTER_RO, jwrd),
  263.         new SpecialMapping(HIRAGANA_LETTER_SMALL_WA, postJwrd),
  264.         new SpecialMapping(HIRAGANA_LETTER_WA, HIRAGANA_LETTER_VU, jwrd),
  265.         new SpecialMapping(COMBINING_KATAKANA_HIRAGANA_VOICED_SOUND_MARK,
  266.                            HIRAGANA_SEMIVOICED_SOUND_MARK, postJwrd),
  267.         new SpecialMapping(HIRAGANA_ITERATION_MARK, HIRAGANA_VOICED_ITERATION_MARK, postJwrd),
  268.         new SpecialMapping(KATAKANA_LETTER_SMALL_A, postJwrd),
  269.         new SpecialMapping(KATAKANA_LETTER_A, jwrd),
  270.         new SpecialMapping(KATAKANA_LETTER_SMALL_I, postJwrd),
  271.         new SpecialMapping(KATAKANA_LETTER_I, jwrd),
  272.         new SpecialMapping(KATAKANA_LETTER_SMALL_U, postJwrd),
  273.         new SpecialMapping(KATAKANA_LETTER_U, jwrd),
  274.         new SpecialMapping(KATAKANA_LETTER_SMALL_E, postJwrd),
  275.         new SpecialMapping(KATAKANA_LETTER_E, jwrd),
  276.         new SpecialMapping(KATAKANA_LETTER_SMALL_O, postJwrd),
  277.         new SpecialMapping(KATAKANA_LETTER_O, KATAKANA_LETTER_DI, jwrd),
  278.         new SpecialMapping(KATAKANA_LETTER_SMALL_TU, postJwrd),
  279.         new SpecialMapping(KATAKANA_LETTER_TU, KATAKANA_LETTER_MO, jwrd),
  280.         new SpecialMapping(KATAKANA_LETTER_SMALL_YA, postJwrd),
  281.         new SpecialMapping(KATAKANA_LETTER_YA, jwrd),
  282.         new SpecialMapping(KATAKANA_LETTER_SMALL_YU, postJwrd),
  283.         new SpecialMapping(KATAKANA_LETTER_YU, jwrd),
  284.         new SpecialMapping(KATAKANA_LETTER_SMALL_YO, postJwrd),
  285.         new SpecialMapping(KATAKANA_LETTER_YO, KATAKANA_LETTER_RO, jwrd),
  286.         new SpecialMapping(KATAKANA_LETTER_SMALL_WA, postJwrd),
  287.         new SpecialMapping(KATAKANA_LETTER_WA, KATAKANA_LETTER_VU, jwrd),
  288.         new SpecialMapping(KATAKANA_LETTER_SMALL_KA, KATAKANA_LETTER_SMALL_KE, postJwrd),
  289.         new SpecialMapping(KATAKANA_LETTER_VA, KATAKANA_LETTER_VO, jwrd),
  290.         new SpecialMapping(KATAKANA_HIRAGANA_PROLONGED_SOUND_MARK, postJwrd),
  291.         new SpecialMapping(KATAKANA_ITERATION_MARK, KATAKANA_VOICED_ITERATION_MARK, postJwrd),
  292.         new SpecialMapping(UNICODE_LOW_BOUND_HAN,UNICODE_HIGH_BOUND_HAN,jwrd),
  293.         new SpecialMapping(CJK_COMPATIBILITY_F900,
  294.                            CJK_COMPATIBILITY_FA2D, jwrd),
  295.         new SpecialMapping(UNICODE_ZERO_WIDTH_NON_BREAKING_SPACE, nbsp),
  296.         new SpecialMapping(END_OF_STRING, EOS)
  297.     };
  298.  
  299.     private static final boolean LineExceptionFlags[] = {
  300.         false,          // kNonCharacter            = 0,
  301.         false,          // kUppercaseLetter         = 1,
  302.         false,          // kLowercaseLetter         = 2,
  303.         false,          // kTitlecaseLetter         = 3,
  304.         true,           // kModifierLetter          = 4,
  305.         true,           // kOtherLetter             = 5,
  306.         true,           // kNonSpacingMark          = 6,
  307.         false,          // kEnclosingMark           = 7,
  308.         false,          // kCombiningSpacingMark    = 8,
  309.         false,          // kDecimalNumber           = 9,
  310.         false,          // kLetterNumber            = 10,
  311.         false,          // kOtherNumber             = 11,
  312.         true,           // kSpaceSeparator          = 12,
  313.         true,           // kLineSeparator           = 13,
  314.         true,           // kParagraphSeparator      = 14,
  315.         true,           // kControlCharacter        = 15,
  316.         true,           // kFormatCharacter         = 16,
  317.         false,          // UNDEFINED                = 17,
  318.         false,          // kPrivateUseCharacter     = 18,
  319.         false,          // kSurrogate               = 19,
  320.         true,           // kDashPunctuation         = 20,
  321.         false,          // kOpenPunctuation         = 21,
  322.         false,          // kClosePunctuation        = 22,
  323.         false,          // kConnectorPunctuation    = 23,
  324.         true,           // kOtherPunctuation        = 24,
  325.         false,          // kMathSymbol              = 25,
  326.         true,           // kCurrencySymbol          = 26,
  327.         false,          // kModifierSymbol          = 27,
  328.         true            // kOtherSymbol             = 28
  329.     };
  330.  
  331.     private static final int kLineAsciiValues[] = {
  332.         //  null    soh     stx     etx     eot     enq     ask     bell
  333.             blank,  blank,  blank,  BREAK,  blank,  blank,  blank,  blank,
  334.         //  bs      ht      lf      vt      ff      cr      so      si
  335.             blank,  BREAK,  BREAK,  BREAK,  BREAK,  cr,     blank,  blank,
  336.         //  dle     dc1     dc2     dc3     dc4     nak     syn     etb
  337.             blank,  blank,  blank,  blank,  blank,  blank,  blank,  blank,
  338.         //  can     em      sub     esc     fs      gs      rs      us
  339.             blank,  blank,  blank,  blank,  blank,  blank,  blank,  blank,
  340.         //  sp      !         "         #         $         %         &         '
  341.             blank,  postJwrd, nonBlank, nonBlank, currency, postJwrd, nonBlank, nonBlank,
  342.         //  (       )          *         +         ,         -   .         /
  343.             preJwrd, postJwrd, nonBlank, nonBlank, numPunct, op, numPunct, nonBlank,
  344.         //  0         1         2         3         4         5         6         7
  345.             digit,    digit,    digit,    digit,    digit,    digit,    digit,    digit,
  346.         //  8         9         :         ;         <         =         >         ?
  347.             digit,    digit,    postJwrd, postJwrd, nonBlank, nonBlank, nonBlank, postJwrd,
  348.         //  @         A         B         C         D         E         F         G
  349.             nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank,
  350.         //  H         I         J         K         L         M         N         O
  351.             nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank,
  352.         //  P         Q         R         S         T         U         V         W
  353.             nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank,
  354.         //  X         Y         Z         [        \         ]         ^         _
  355.             nonBlank, nonBlank, nonBlank, preJwrd, nonBlank, postJwrd, nonBlank, nonBlank,
  356.         //  `         a         b         c         d         e         f         g
  357.             nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank,
  358.         //  h         i         j         k         l         m         n         o
  359.             nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank,
  360.         //  p         q         r         s         t         u         v         w
  361.             nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank,
  362.         //  x         y         z         {        |         }         ~         del
  363.             nonBlank, nonBlank, nonBlank, preJwrd, nonBlank, postJwrd, nonBlank, blank,
  364.         //  ctrl    ctrl    ctrl    ctrl    ctrl    ctrl    ctrl    ctrl
  365.             blank,  blank,  blank,  blank,  blank,  blank,  blank,  blank,
  366.         //  ctrl    ctrl    ctrl    ctrl    ctrl    ctrl    ctrl    ctrl
  367.             blank,  blank,  blank,  blank,  blank,  blank,  blank,  blank,
  368.         //  ctrl    ctrl    ctrl    ctrl    ctrl    ctrl    ctrl    ctrl
  369.             blank,  blank,  blank,  blank,  blank,  blank,  blank,  blank,
  370.         //  ctrl    ctrl    ctrl    ctrl    ctrl    ctrl    ctrl    ctrl
  371.             blank,  blank,  blank,  blank,  blank,  blank,  blank,  blank,
  372.         //  nbsp   í         ó         ú         ñ         Ñ         ª
  373.             nbsp,  nonBlank, postJwrd, currency, currency, currency, nonBlank, nonBlank,
  374.         //  ¿         ⌐         ¬         ½        ¼         ¡   «         »
  375.             nonBlank, nonBlank, nonBlank, preJwrd, nonBlank, op, nonBlank, nonBlank,
  376.         //  ░         ▒         ▓         │         ┤         ╡         ╢         ╖
  377.             postJwrd, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank,
  378.         //  ╕         ╣         ║         ╗         ╝         ╜         ╛         ┐
  379.             nonBlank, nonBlank, nonBlank, postJwrd, digit,    digit,    digit,    nonBlank,
  380.         //  └         ┴         ┬         ├         ─         ┼         ╞         ╟
  381.             nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank,
  382.         //  ╚         ╔         ╩         ╦         ╠         ═         ╬         ╧
  383.             nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank,
  384.         //  ╨         ╤         ╥         ╙         ╘         ╒         ╓         ╫
  385.             nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank,
  386.         //  ╪         ┘         ┌         █         ▄         ▌         ▐         ▀
  387.             nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank,
  388.         //  α         ß         Γ         π         Σ         σ         µ         τ
  389.             nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank,
  390.         //  Φ         Θ         Ω         δ         ∞         φ         ε         ∩
  391.             nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank,
  392.         //  ≡         ±         ≥         ≤         ⌠         ⌡         ÷         ≈
  393.             nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank,
  394.         //  °         ∙         ·         √         ⁿ         ²         ■          
  395.             nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank, nonBlank
  396.     };
  397.  
  398.     private static final UnicodeClassMapping kLineMap
  399.         = new UnicodeClassMapping(kRawMapping, kExceptionChar, LineExceptionFlags,
  400.         kLineAsciiValues);
  401.  
  402.     public WordBreakTable forward()
  403.     {
  404.         return kLineForward;
  405.     }
  406.  
  407.     public WordBreakTable backward()
  408.     {
  409.         return kLineBackward;
  410.     }
  411.  
  412.     public UnicodeClassMapping map()
  413.     {
  414.         return kLineMap;
  415.     }
  416. }
  417.